package br.ufpe.cin.plebeia.model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.persistence.Version;

@Entity
public class Abelha extends EntidadePersistente {

	private long id;

	private int version;

	private int numero;

	private Date dataColeta;

	private Sexo sexo;

	private String observacao;

	private TipoInformacao tipoDeInformacao;

	private EspecieAnimal especieAnimal;

	private Localidade localidade;

	private EspecieVegetal especieVegetal;

	private Usuario usuario;

	private Foto foto;

	private TipoDeColecao tipoColecao;

	@Temporal(TemporalType.DATE)
	public Date getDataColeta() {
		return dataColeta;
	}

	public void setDataColeta(Date dataColeta) {
		this.dataColeta = dataColeta;
	}

	@ManyToOne
	public EspecieAnimal getEspecieAnimal() {
		return especieAnimal;
	}

	public void setEspecieAnimal(EspecieAnimal especieAnimal) {
		this.especieAnimal = especieAnimal;
	}

	@ManyToOne
	public EspecieVegetal getEspecieVegetal() {
		return especieVegetal;
	}

	public void setEspecieVegetal(EspecieVegetal especieVegetal) {
		this.especieVegetal = especieVegetal;
	}

	public Foto getFoto() {
		return foto;
	}

	public void setFoto(Foto foto) {
		this.foto = foto;
	}

	@ManyToOne
	public Localidade getLocalidade() {
		return localidade;
	}

	public void setLocalidade(Localidade localidade) {
		this.localidade = localidade;
	}

	@Column(unique=true)
	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	@Enumerated(EnumType.STRING)
	public Sexo getSexo() {
		return sexo;
	}

	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}

	@ManyToOne
	public TipoDeColecao getTipoColecao() {
		return tipoColecao;
	}

	public void setTipoColecao(TipoDeColecao tipoColecao) {
		this.tipoColecao = tipoColecao;
	}


	public TipoInformacao getTipoDeInformacao() {
		return tipoDeInformacao;
	}

	public void setTipoDeInformacao(TipoInformacao tipoDeInformacao) {
		this.tipoDeInformacao = tipoDeInformacao;
	}

	@ManyToOne
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	@Id @GeneratedValue(strategy=GenerationType.AUTO) 
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	@Version
	public int getVersion() {
		return version;
	}

	public void setVersion(int version) {
		this.version = version;
	}
	
	public String stringSexo(){
		return this.getSexo().getStringSexo();
	}

}
